package com.example.loginproject.view.views

import android.annotation.SuppressLint
import android.content.Context
import android.text.InputType
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.FrameLayout
import com.example.loginproject.R
import com.example.loginproject.databinding.LayoutUserInputBinding

/**
/**使用代码创建一个控件时 调用这个构造方法*/
constructor(context:Context):super(context){}
/**在xml中添加一个控件 并设置对应属性 就调用这个构造方法*/
constructor(context: Context, attrs: AttributeSet?):super(context,attrs){}
/**在xml中添加一个控件 并且设置了style样式的 就会调用这个构造方法*/
constructor(context: Context, attrs: AttributeSet?, style:Int):super(context, attrs,style){}
 */
@SuppressLint("MissingInflatedId")
class UserInputView(context: Context, attrs: AttributeSet?): FrameLayout(context,attrs){
    private val binding:LayoutUserInputBinding by lazy {
        LayoutUserInputBinding.inflate(LayoutInflater.from(context))
    }
    init { //当一个对象被创建时 1.构造函数 2.init方法
        // 讲layout布局文件和当前这个类相关联
        // 使用布局解析器解析出来
        val layoutInflater = LayoutInflater.from(context)
        // 创建一个布局参数
        val lp = FrameLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT)
        //将解析出来的View添加到当前的容器里面 显示出来
        addView(binding.root,lp)

        //解析xml中自定义的属性 -> 拆包
        //从attrs里面解析出 R.styleable.UserInputView里面自定义的对应属性和值
        val typedArray = context.obtainStyledAttributes(attrs, R.styleable.UserInputView)
        //从typeArray中解析每一个属性的值
        val title  = typedArray.getString(R.styleable.UserInputView_title)
        val placeholder = typedArray.getString(R.styleable.UserInputView_placeholder)
        val inputType = typedArray.getInteger(R.styleable.UserInputView_input_type, 2)
        //回收
        typedArray.recycle()

        binding.titleTextView.text = title
        binding.inputEditText.hint = placeholder
        if (inputType == 1){
            binding.inputEditText.inputType =
                InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
        }
    }
}














